package com.airlines.crewassignment.service.crew;

import java.util.Date;
import java.util.List;

import com.airlines.base.config.response.ResponseResult;
import com.airlines.crewassignment.domain.CrewTask;
import com.airlines.crewassignment.domain.DateTimeRange;
import com.airlines.crewassignment.entity.crew.CrewSchedule;

/**
 * @author xxxx
 * @date 2018年4月27日 
 * @description 机组人员任务查询计算服务
 */
public interface CrewTaskService {
	/**
	 * 查询机组人员的所有任务情况
	 * 1.航班
	 * 2.加机组(非因私)
	 * 3.值班
	 * 4.备份
	 * 5.不能飞(训练)
	 * @param dateTimeRange
	 * @param workcode
	 * @return
	 */
	List<CrewTask> listCrewTask(DateTimeRange dateTimeRange,String dutyCode,String workcode);
	
	/**
	 * 查询机组人员的所有任务情况,包括生日、请假、疗养等待
	 * 1.航班
	 * 2.加机组(所有)
	 * 3.值班
	 * 4.备份
	 * 5.不能飞(所有)
	 * 6.生日当天全天不能飞
	 * @param dateTimeRange
	 * @param workcode
	 * @return
	 */
	List<CrewTask> listCrewTaskAll(DateTimeRange dateTimeRange,String dutyCode,String workcode);
	
	
	/**
	 * 查询机组人员的所有航班任务情况
	 * @param dateTimeRange
	 * @param workcode
	 * @return
	 */
	List<CrewTask> listCrewTaskForFlight(DateTimeRange dateTimeRange,String dutyCode,String workcode);
	
	/**
	 * 查询所有机组人员的加机组情况（因私除外）
	 * @param dateTimeRange
	 * @param workcode
	 * @return
	 */
	List<CrewTask> listCrewTaskForAddCrew(DateTimeRange dateTimeRange,String dutyCode,String workcode);
	
	/**
	 * 查询所有机组人员的加机组情况（所有）
	 * @param dateTimeRange
	 * @param workcode
	 * @return
	 */
	List<CrewTask> listCrewTaskForAddCrewAll(DateTimeRange dateTimeRange,String dutyCode,String workcode);

	/**
	 * 查询所有机组人员值班情况
	 * @param dateTimeRange
	 * @param workcode
	 * @return
	 */
	List<CrewTask> listCrewTaskForDuty(DateTimeRange dateTimeRange,String dutyCode, String workcode);

	/**
	 * 查询所有机组人员备份情况
	 * @param dateTimeRange
	 * @param workcode
	 * @return
	 */
	List<CrewTask> listCrewTaskForBak(DateTimeRange dateTimeRange,String dutyCode, String workcode);

	/**
	 * 查询所有机组人员不能飞（训练）信息
	 * @param dateTimeRange
	 * @param workcode
	 * @return
	 */
	List<CrewTask> listCrewTaskForTrain(DateTimeRange dateTimeRange, String dutyCode,String workcode);
	
	/**
	 * 查询机组人员不能飞信息(所有)
	 * @param dateTimeRange
	 * @param workcode
	 * @return
	 */
	List<CrewTask> listCrewTaskForCannotFly(DateTimeRange dateTimeRange, String dutyCode,String workcode);

	/**
	 * 查询所有机组人员生日信息，生日是自动不在位的一种
	 * @param dateTimeRange
	 * @param dutyCode
	 * @param workcode
	 * @return
	 */
	List<CrewTask> listCrewTaskForBirthday(DateTimeRange dateTimeRange, String dutyCode, String workcode);
	
	/**
	 * 查询所有机组人员日历
	 * @param dateTimeRange
	 * @param dutyCode
	 * @param workcode
	 * @return
	 */
	List<CrewSchedule> listCrewSchedule(DateTimeRange dateTimeRange, String dutyCode,String workcode);
	
	/**
	 * 查询机组人员最有一次不能飞信息(病假)
	 * @param dateTimeRange
	 * @param dutyCode
	 * @param workcode
	 * @return
	 */
	List<CrewTask> listCrewTaskForLastSickLeave(String dutyCode, String workcode, Date beforeFlightDate);
	
	
	
	
	/**
	 * 查询机组人员的所有任务情况,包括生日、请假、疗养等待
	 * 1.航班
	 * 2.加机组(所有)
	 * 3.值班
	 * 4.备份
	 * 5.不能飞(所有)
	 * 6.生日当天全天不能飞
	 * @param dateTimeRange
	 * @param workcode
	 * @return
	 */
	List<CrewTask> listCrewTaskPage(DateTimeRange dateTimeRange,String dutyCode,String[] workcodeArray);

	
	ResponseResult<String> saveCrewTaskAssignmentCk(String workcode,Date start,Date end);

	/**
	 * 查询公司所有给机组人员安排的任务，不包含飞行任务，飞行任务在航班中计算
	 * @param dutyCode
	 * @param workcode
	 * @param dateTimeRange
	 * @return
	 */
	List<CrewTask> listCrewTaskForAssignment(String dutyCode, String workcode, DateTimeRange dateTimeRange);
}
